//设置请求头前缀BasicUrl
export const BasicUrl = "http://106.52.70.79:2108"
// export const BasicUrl = "http://192.168.67.194:2108"

//不需要token的数据请求
const Request = (url, method, data = {}) => {
  // 传入请求参数，返回一个promise对象,参数是一个携带resolve，reject回调函数的的立即执行函数
  return new Promise((resolve, reject) => {
    // 这里执行数据请求异步操作
    wx.request({
      url: BasicUrl + url,
      method: method,
      data: data,
      header: {
        'Content-Type': 'application/json'
      },
      success: (res) => {
        // 成功回调：执行resolve
        resolve(res) //把promise对象的状态置为已完成,携带返回结果res
      },
      fail: (err) => {
        // 失败回调：执行reject
        reject(err) //把promise对象的状态置为失败,携带错误原因err
      }
    })
  })
}


// 需要携带token的请求
const RequestToken = (url, method, data = {}) => {
  return new Promise((resolve, reject) => {
    wx.request({
      url: BasicUrl + url,
      method: method,
      data: data,
      header: {
        'Content-Type': 'application/json',
        'Authorization': wx.getStorageSync('token')
      },
      success: (res) => {
        resolve(res)
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}


// 请求封装,实现自行判断是否携带token
export const request = (url, method="GET", data = {}, isToken = true) => {

  return new Promise((resolve, reject) => {
    //  需要携带token的请求
    if (isToken) {
      let token = wx.getStorageSync('token')
      if (token) {
        // 缓存中存在token,发起RequestToken数据请求
        RequestToken(url, method, data).then(res => {
          resolve(res) //把promise对象的状态置为已完成,携带RequestToken数据请求成功结果res
        })
      } else {
        // 缓存中token为空，提示授权登录
        wx.showToast({
          title: '请先登录',
          icon: 'error'
        })
        wx.removeStorageSync('token')
        wx.removeStorageSync('user_info')
        wx.switchTab({
          url: '/pages/mine/index',
        })
      }
    } else {
      //  不需要token的请求，发起Request
      Request(url, method, data).then(res => {
        resolve(res) //把promise对象的状态置为已完成,携带Request请求成功结果res
      })
    }
  })
}